This disclosure relates generally to clustered storage systems, and more specifically, to load-balancing input/output (I/O) requests across cluster nodes of a clustered storage system.
Clustered storage systems, such as Network Attached Storage systems (NAS), provide client access to file data based on standard file protocols (e.g., SMB, NFS, etc.). Clustered storage systems may include two or more cluster nodes, a distributed files system, and shared storage. After a client computing device initiates a session (e.g., an HTTP session), the client may perform multiple I/O requests or metadata operations for data on the clustered storage system.
Current load-balancing mechanisms are inefficient. Because single server systems may be limited in scalability, more and more clustered storage systems (e.g., scale-out NAS systems) are appearing on the market. However, clustered storage systems today share a common problem in that it is very difficult to load-balance I/O requests across cluster nodes. Load-balancing is a way for a clustered storage system to control the amount of I/O requests that are transmitted by various clients to particular nodes of the clustered storage system. This may increase efficiency of the clustered storage system (e.g., decrease node saturation, increase throughput, etc.). The criteria for such load-balancing may depend on many static and dynamic aspects of the overall clustered storage system.
There are various disadvantages regarding prior art load-balancing. Prior art load-balancing uses session-based or stateful (e.g., DNS round robin) load-balancing because systems today do not allow for individual I/O request load-balancing during a single session. For example, load-balancing with the HTTP protocol cannot be used for NAS protocols such as SMB because SMB is session-based. Accordingly, client I/O requests cannot be transmitted to more than one cluster node within the clustered storage system during a single session without having a service interruption. In the prior art, once a session is established between a client and the clustered storage system, all of the client I/O requests for the session are handled by a single node within the clustered storage system. This may cause several disadvantages. For example, some nodes might be heavily utilized while others remain idle. A client may transmit a heavy I/O request workload during a single session, which might saturate the node. This saturation may impact other clients trying to communicate with the node as well as potentially impact the performance of the entire clustered storage system. Further, the clustered storage systems in the prior art do not have control over these sessions in case there is a heavy I/O request load. Moreover, the granularity of session-based load-balancing is not sufficient enough. Therefore, it is desirable to load-balance multiple I/O requests of a client across cluster nodes during a single session.